package com.stt.prototype;

import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;

/**
 * 角色原型管理器
 * 负责存储和管理预设角色模板
 * 实现原型模式，支持角色克隆功能
 *
 * @author Your Name
 * @version 1.0
 */
@Component
public class CharacterPrototype {
    
    /**
     * 预设角色模板存储
     * key: 模板名称
     * value: 角色模板对象
     */
    private final Map<String, com.stt.model.Character> prototypes = new HashMap<>();
    
    /**
     * 初始化预设角色
     * Spring容器启动时自动执行
     * 创建基础的职业模板
     */
    @PostConstruct
    public void init() {
        // 初始化战士预设模板
        com.stt.model.Character warriorTemplate = new com.stt.model.Character();
        warriorTemplate.setProfession("Warrior");
        warriorTemplate.setLevel(1);
        warriorTemplate.setAttack(100);  // 战士基础攻击力
        warriorTemplate.setHealth(1000); // 战士基础生命值
        warriorTemplate.setMana(200);    // 战士基础魔法值
        prototypes.put("warrior_template", warriorTemplate);
        
        // 初始化法师预设模板
        com.stt.model.Character mageTemplate = new com.stt.model.Character();
        mageTemplate.setProfession("Mage");
        mageTemplate.setLevel(1);
        mageTemplate.setAttack(120);  // 法师基础攻击力
        mageTemplate.setHealth(800);  // 法师基础生命值
        mageTemplate.setMana(1000);   // 法师基础魔法值
        prototypes.put("mage_template", mageTemplate);
    }
    
    /**
     * 根据模板名称克隆角色
     * 
     * @param templateName 模板名称
     * @return 克隆的角色对象
     * @throws IllegalArgumentException 如果模板不存在
     */
    public com.stt.model.Character cloneCharacter(String templateName) {
        com.stt.model.Character prototype = prototypes.get(templateName);
        if (prototype == null) {
            throw new IllegalArgumentException("Template not found: " + templateName);
        }
        return prototype.clone();
    }
    
    /**
     * 添加新的角色模板
     * 
     * @param templateName 模板名称
     * @param character 角色模板对象
     */
    public void addPrototype(String templateName, com.stt.model.Character character) {
        prototypes.put(templateName, character);
    }
} 